package com.yang.mall;

/**
 * Created by chijr on 16/11/9.
 */

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.annotations.ApiIgnore;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;


/**
 * SwaggerConfig
 */
@Configuration
@EnableSwagger2
@ApiIgnore
public class SwaggerConfig {

    /** * SpringBoot默认已经将classpath:/META-INF/resources/和classpath:/META-INF/resources/webjars/映射 * 所以该方法不需要重写，如果在SpringMVC中，可能需要重写定义（我没有尝试） * 重写该方法需要 extends WebMvcConfigurerAdapter * */
    /**
     * 可以定义多个组，比如本类中定义把test和demo区分开了 * （访问页面就可以看到效果了） *
     */
    @Bean
    public Docket ewalletApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("yangApi")
                .genericModelSubstitutes(DeferredResult.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(true)
                .pathMapping("/")// base，最终调用接口后会和paths拼接在一起
                .select()
                .paths(or(regex("/.*")))//过滤的接口
                .build()
                .apiInfo(ewalletApiInfo())
                .globalOperationParameters(setHeaderToken());
    }

    private ApiInfo ewalletApiInfo() {
        ApiInfo apiInfo = new ApiInfo("公用api",//大标题
                "羊冉冉零食商行系统接口",//小标题
                "1.0",//版本
                "NO terms of service",
                "kadorlin@gmail.com",//作者
                "集团内部使用",//链接显示文字
                "http://www.apache.org/licenses/LICENSE-2.0.html"//网站链接
        );
        return apiInfo;
    }

    /**
     * 设置公共header参数
     * @return
     */
    private List<Parameter> setHeaderToken() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        ParameterBuilder token = new ParameterBuilder();

        List<Parameter> pars = new ArrayList<>();
        token.name("token").description("校验TOKEN").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        tokenPar.name("memberId").description("会员ID").modelRef(new ModelRef("string")).parameterType("query").required(false).build();
        pars.add(token.build());
        pars.add(tokenPar.build());

        return pars;
    }



}